package frsf.cidisi.exercise.tp2.situationCalculus;

import frsf.cidisi.exercise.tp2.interfaz.ControlSimulacion;
import frsf.cidisi.exercise.tp2.utiles.DatosAmbiente;
import frsf.cidisi.exercise.tp2.situationCalculus.ArqueologoPerception;
import frsf.cidisi.faia.agent.Action;
import java.util.Vector;
import frsf.cidisi.faia.agent.Agent;
import frsf.cidisi.faia.environment.Environment;
import frsf.cidisi.faia.simulator.Log;


public class IslaEmiroce extends Environment {

	private DatosAmbiente datosAmbiente = new DatosAmbiente();
	private Log log = new Log();
	private boolean pirata;
	private ControlSimulacion controlSimulacion;
	
    public IslaEmiroce() {
        this.environmentState = new EstadoActualIsla();
    }

    @Override
    public EstadoActualIsla getEnvironmentState() {
        return (EstadoActualIsla) super.getEnvironmentState();
    }

    @Override
    public boolean agentFailed(Action action) {

        //TODO: Complete Method

        return false;
    }

    @Override
    public ArqueologoPerception getPercept() {

//        actualizarConsolaInterfaz();
    	
    	//Actua Ubeme
    	if(pirata){
    		accionUbeme();
    	}
        
        // Crea una nueva percepcion para retornar
         ArqueologoPerception perception = new ArqueologoPerception();
		
		// Set de todos los sensores del agente
         perception.setPesoTesoroActual(this.getEnvironmentState().gettesoros()[this.getEnvironmentState().getposicionAgente()-1][1]);
         perception.settesoroactual(this.getEnvironmentState().gettesoros()[this.getEnvironmentState().getposicionAgente()-1][0]);
         perception.setdistribuciondetesoros(this.getEnvironmentState().gettesoros());
        
        // Retorna la percepcion
        return perception;

    }
    
    private void accionUbeme(){
    	
    	//Modificar o no el ambiente.
    	int posicionPirata = (int)(Math.random()*10)+1;
    	   	
    	this.getEnvironmentState().setposicionPirata(posicionPirata);
    	    	
    	if(!(posicionPirata==getEnvironmentState().getposicionAgente()) && Math.random()>0.5){
    		
    		
    			double porcentajeRobo = Math.random()*0.5;
    			
    			double valorRobo =(int)(this.getEnvironmentState().gettesoros()[posicionPirata][0]*porcentajeRobo);
    			double pesoRobo =(int)(this.getEnvironmentState().gettesoros()[posicionPirata][1]*porcentajeRobo);
    			
    			this.getEnvironmentState().gettesoros()[posicionPirata][0] -= valorRobo;
    			this.getEnvironmentState().gettesoros()[posicionPirata][1] -= pesoRobo;
    			
    			this.getEnvironmentState().setTesoroPirata(this.getEnvironmentState().getTesoroPirata()+valorRobo);
    			this.getEnvironmentState().setPesoAcopladoPirata(this.getEnvironmentState().getPesoAcopladoPirata()+pesoRobo);
    		
    	   		
    	}
    	
    	
    }

    @Override
    public String toString() {
        return this.environmentState.toString();
    }

	public void setDatosAmbiente(DatosAmbiente datosAmbiente) {
		this.datosAmbiente = datosAmbiente;
	}

	public DatosAmbiente getDatosAmbiente() {
		return datosAmbiente;
	}

	public void setLog(Log log) {
		this.log = log;
	}

	public Log getLog() {
		return log;
	}

	public void setPirata(boolean pirata) {
		this.pirata = pirata;
	}

	public boolean isPirata() {
		return pirata;
	}

	public void setControlSimulacion(ControlSimulacion controlSimulacion) {
		this.controlSimulacion = controlSimulacion;
	}

	public ControlSimulacion getControlSimulacion() {
		return controlSimulacion;
	}

	public void actualizarDatosAmbiente(int escenario) {
		// TODO Auto-generated method stub
		
	}
}
